package cn.iocoder.yudao.module.wecom.job;

import cn.hutool.core.date.*;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.wecom.dal.dataobject.apiconfig.WeComApiConfigDO;
import cn.iocoder.yudao.module.wecom.dal.dataobject.chatmsgrecord.WeChatMsgRecordDO;
import cn.iocoder.yudao.module.wecom.dal.dataobject.contactstat.WeContactStatDO;
import cn.iocoder.yudao.module.wecom.dal.dataobject.msgrecord.WeMsgRecordDO;
import cn.iocoder.yudao.module.wecom.dal.dataobject.user.WeUserDO;
import cn.iocoder.yudao.module.wecom.dal.mysql.chatmsgrecord.WeChatMsgRecordMapper;
import cn.iocoder.yudao.module.wecom.dal.mysql.contactstat.WeContactStatMapper;
import cn.iocoder.yudao.module.wecom.dal.mysql.msgrecord.WeMsgRecordMapper;
import cn.iocoder.yudao.module.wecom.http.WeApi;
import cn.iocoder.yudao.module.wecom.service.apiconfig.WeComApiConfigService;
import cn.iocoder.yudao.module.wecom.service.user.WeUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.temporal.TemporalUnit;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 定时清理聊天记录
 * 每日凌晨1点执行
 */
@Component
@Slf4j
public class WeDeleteMsgJob implements JobHandler {

    @Resource
    private WeMsgRecordMapper weMsgRecordMapper;

    @Resource
    private WeChatMsgRecordMapper weChatMsgRecordMapper;

    @Resource
    private WeComApiConfigService weComApiConfigService;

    @Override
    @TenantJob
    public String execute(String param) throws Exception {

        WeComApiConfigDO apiConfig = weComApiConfigService.getWeComApiConfig();
        Integer day = apiConfig.getMsgSaveDay();
        if (Objects.isNull(day)) {
            day = 7;
        }

        long count = weMsgRecordMapper.selectCount(new LambdaQueryWrapperX<WeMsgRecordDO>()
                .lt(WeMsgRecordDO::getCreateTime, DateUtil.offsetDay(new Date(), -day).toLocalDateTime()));
        log.info("============================================ 聊天记录清除定时器执行 ============================================ ");
        weMsgRecordMapper.delete(new LambdaQueryWrapperX<WeMsgRecordDO>()
                .lt(WeMsgRecordDO::getCreateTime, DateUtil.offsetDay(new Date(), -day).toLocalDateTime()));
        log.info("============================================ 聊天记录清除 "+count+" ============================================ ");

        long count2 = weChatMsgRecordMapper.selectCount(new LambdaQueryWrapperX<WeChatMsgRecordDO>()
                .lt(WeChatMsgRecordDO::getCreateTime, DateUtil.offsetDay(new Date(), -day).toLocalDateTime()));
        log.info("============================================ 群聊天记录清除定时器执行 ============================================ ");
        weChatMsgRecordMapper.delete(new LambdaQueryWrapperX<WeChatMsgRecordDO>()
                .lt(WeChatMsgRecordDO::getCreateTime, DateUtil.offsetDay(new Date(), -day).toLocalDateTime()));
        log.info("============================================ 群聊天记录清除 "+count2+" ============================================ ");
        return "success";
    }
}
